C++ では、すべての式はいずれかの Lvalue または Rvalueになります。この区別は、式がオブジェクトの アイデンティティ (どこにあるか)を指すのか、それともその 値 (中身)を指すのかを定義します。
1. アイデンティティと内容の違い
Lvalue(ロケータ値)は、永続的なメモリアドレスを持つオブジェクトを表します。これは、RAM 上のラベル付きボックスだと考えてください。一方、 Lvalue (ロケータ値)は、永続的なメモリアドレスを持つオブジェクトを表します。これは、RAM 上のラベル付きボックスだと考えてください。一方、 Rvalue Rvalue(リード値)は一時的なものであり、プログラムでアクセス可能なアドレスを持たない一時的な結果やリテラルを表します。
2. 機能的移行
Lvalue は Rvalue として動作できます(コンパイラは箱の中の値を単に取得するだけですが、逆は禁止されています。例えば、 &42 のようなリテラル数値のアドレスを取ることはできません。なぜなら、持続的なアイデンティティがないからです。
$$ \text{Lvalue} \xrightarrow{\text{変換}} \text{Rvalue} \quad (\text{許可される}) $$
$$ \text{Rvalue} \xrightarrow{\text{代入}} \text{Lvalue} \quad (\text{禁止}) $$
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>